import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:get_storage/get_storage.dart';
import 'package:demo/config/app_theme.dart';
import 'package:media_kit/media_kit.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';

// 总配置
class AppConfig {
  // 以下为配置文件读取出来
  static final navigatorKey = GlobalKey<NavigatorState>();
  // 在线客服
  static const String robotId = '10001';
  // 视频大小
  static const int videoSize = 100;
  // 请求隐私协议
  static const String privacyHost = 'https://baidu.com';
  // 请求服务协议
  static const String serviceHost = 'https://baidu.com';
  // 数据库
  static const String dbName = 'demo—im.db';
  // 设备类型
  static final String device = Platform.operatingSystem;
  // 项目名称
  static late final String appName;
  // 版本号码
  static late final String version;
  // 是否打开
  static bool open = true;
  // 超时时间
  static Duration timeout = const Duration(seconds: 5);
  // 密码文本
  static const String passText = '密码长度为6-16位，可以使用字母、数字和特殊字符';

  // 初始化
  static init() async {
    // 全局异常
    await _loadException();
    // 媒体库
    MediaKit.ensureInitialized();
    // 全局存储
    await GetStorage.init();
    // 禁止横屏
    await _loadPortrait();
    // 读取app配置
    await _loadPackage();
    // 生命周期
    await _loadAppLifecycle();
  }

  // 拦截异常
  static _loadException() {
    FlutterError.onError = (details) {
      // 错误
      String error = details.exception.toString();
      // 处理
      error = error.replaceFirst('Exception: ', '');
      if ('' == error) {
        return;
      }
      EasyLoading.showToast(error);
    };
  }

  // 禁止横屏
  static _loadPortrait() async {
    // 禁止横屏
    WidgetsFlutterBinding.ensureInitialized();
    await SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  }

  // 读取app配置
  static _loadPackage() async {
    final packageInfo = await PackageInfo.fromPlatform();
    appName = packageInfo.appName;
    version = packageInfo.version;
  }

  // 生命周期
  static _loadAppLifecycle() {
    SystemChannels.lifecycle.setMessageHandler((handler) async {
      if (AppLifecycleState.resumed.toString() == handler) {
        debugPrint('打开app');
        // 是否打开
        AppConfig.open = true;
      } else if (AppLifecycleState.paused.toString() == handler) {
        debugPrint('关闭app');
        // 是否打开
        AppConfig.open = false;
      }
      return handler;
    });
  }

  // 下拉刷新全局配置
  static refreshConfig({required Widget child}) {
    return RefreshConfiguration(
      // 配置默认头部指示器
      headerBuilder: () => const ClassicHeader(
        idleText: "下拉刷新",
        refreshingText: "刷新中...",
        completeText: "刷新成功",
        releaseText: "松开立即刷新",
        failedText: '刷新失败',
      ),
      // 配置默认底部指示器
      footerBuilder: () => const ClassicFooter(
        idleText: "上拉加载",
        loadingText: "加载中…",
        canLoadingText: "松手开始加载数据",
        failedText: "加载失败",
        noDataText: "没有更多数据了",
      ),
      // 头部触发刷新的越界距离
      headerTriggerDistance: 60.0,
      // 底部触发刷新的越界距离,距离底部多少开始刷新
      footerTriggerDistance: 0,
      // 头部最大可以拖动的范围,如果发生冲出视图范围区域,请设置这个属性
      maxOverScrollExtent: 100,
      // 这个属性不兼容PageView和TabBarView,如果你特别需要TabBarView左右滑动,你需要把它设置为true
      enableScrollWhenRefreshCompleted: false,
      // 在加载失败的状态下,用户仍然可以通过手势上拉来触发加载更多
      enableLoadingWhenFailed: true,
      enableBallisticRefresh: true,
      // Viewport不满一屏时,禁用上拉加载更多功能
      hideFooterWhenNotFull: false,
      // 可以通过惯性滑动触发加载更多
      enableBallisticLoad: false,
      // 子包
      child: child,
    );
  }

  // 主题
  static final ThemeData theme = AppTheme.theme;
}
